#include <iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;

//class Solution//版本1
//{
//public:
//    //俩个string "来回倒"
//    //1：一个是被乘数与乘数
//    //2：当第二个数据开始乘的时候这时候需要吧length-1取出
//    //3：插入末尾值，在相加插入……x
//    string multiply(string num1, string num2)
//    {
//        string tmp1,tmp2;
//        int value1,value2;
//        int index=(num2.size())-1,sz=num1.size(),tmp;
//
//        while(sz--)
//        {
//            int count =0,carry=0;
//            value2=num2[index--]-'0';//乘数
//            for(int i=num1.size()-1;i>=0;i--)
//            {
//                value1 =num1[i]-'0';//被乘数
//
//                if(!tmp2.empty())
//                {
//                    int number=tmp2.back()-'0';
//                    tmp=(value1*value2)+carry+number;
//                    tmp2.pop_back();
//                }
//                else
//                {
//                    tmp=(value1*value2)+carry;
//                }
//
//                carry=tmp/10;
//                tmp%=10;
//                count++;
//                tmp1+=tmp+'0';
//            }
//            if(carry>0)
//            {
//                tmp1+=carry+'0';
//            }
//                --count;
//                for(int j=0;j<count;j++)
//                {
//                    tmp2+=tmp1.back();
//                    tmp1.pop_back();
//                }
//
//        }
//        reverse(tmp1.begin(),tmp1.end());
//        return tmp1;
//    }
//};
//class Solution//版本二
//        {
//public:
//    //俩个string "来回倒"
//    //1：一个是被乘数与乘数
//    //2：当第二个数据开始乘的时候这时候需要吧length-1取出
//    //3：插入末尾值，在相加插入……x
//    string multiply(string num1, string num2)
//    {
//        if(num1.back()-'0'==0||num2.back()-'0'==0)
//        {
//            if(num1.back()-'0'==0)
//            {
//                return num1;
//            }
//            else
//            {
//                return num2;
//            }
//        }
//        string tmp1,tmp2;
//        int value1,value2;
//        int index=(num2.size())-1,sz=num1.size(),tmp;
//              while(sz>=0&&index>=0)
//              {
//                  int count =0,carry=0;
//                  value2=num2[index]-'0';//乘数
//
//
//                  for(int i=num1.size()-1;i>=0;i--)
//                  {
//
//                      value1 =num1[i]-'0';//被乘数
//
//                      if(!tmp2.empty())
//                      {
//                          int number=tmp2.back()-'0';
//                         tmp=(value1*value2)+carry+number;
//                         tmp2.pop_back();
//                      }
//                      else
//                      {
//                          tmp=(value1*value2)+carry;
//                      }
//
//                      carry=tmp/10;
//                      tmp%=10;
//                      count++;
//                      tmp1+=tmp+'0';
//                  }
//                  index--;
//                  sz--;
//                  if(carry>0)
//                  {
//                      count++;
//                      tmp1+=carry+'0';
//                  }
//                      --count;
//                      for(int j=0;j<count;j++)
//                      {
//                          tmp2+=tmp1.back();
//                          tmp1.pop_back();
//                      }
//
//                //  tmp2.push_back('0');
//              }
//
//
//            while(!tmp2.empty())
//            {
//               tmp1+=tmp2.back();
//               tmp2.pop_back();
//             }
//              reverse(tmp1.begin(),tmp1.end());
//
//              return tmp1;
//    }
//};

class Solution//版本三：for循环改while
{
public:
    //俩个string "来回倒"
    //1：一个是被乘数与乘数
    //2：当第二个数据开始乘的时候这时候需要吧length-1取出
    //3：插入末尾值，在相加插入……x
    string multiply(string num1, string num2)
    {
        //对'0'的处理
       if(num1.back()=='0')
           return num1;
       if(num2.back()=='0')
           return num2;


        string tmp1,tmp2;
        int value1,value2;
        int index=(num2.size())-1,sz=num1.size(),tmp;



        while(sz>0||index>=0)
        {
            int count =0,carry=0,index1=num1.size()-1;
            value2=num2[index]-'0';//乘数


           while(index1>=0)
           {
               value1 =num1[index1--]-'0';//被乘数

               if(!tmp2.empty())
               {
                   int number=tmp2.back()-'0';
                   tmp=(value1*value2)+carry+number;
                   tmp2.pop_back();
               }
               else
               {
                   tmp=(value1*value2)+carry;
               }

               carry=tmp/10;
               tmp%=10;
               count++;
               tmp1+=tmp+'0';
           }
            index--;
           if(index==-1)
            sz=-1;
           else
               sz--;
            if(carry>0)//乘完还有多一个10位
            {
                count++;
                tmp1+=carry+'0';
            }

            --count;
            for(int j=0;j<count;j++)
            {
                tmp2+=tmp1.back();
                tmp1.pop_back();
            }

        }



        while(!tmp2.empty())
        {
            tmp1+=tmp2.back();
            tmp2.pop_back();
        }
        reverse(tmp1.begin(),tmp1.end());

        return tmp1;
    }
};
int main()
{
    Solution d1;
   cout<< d1.multiply(string("52"),string("60"));

    return 0;
}
